Skip to content

Make the installed app run: flatten bundle + AHK->exe bridge + icon fix#19

Merged
agr77one merged 3 commits into
mainfrom
diag/frozen-tree
Jun 16, 2026
Merged

Make the installed app run: flatten bundle + AHK->exe bridge + icon fix#19
agr77one merged 3 commits into
mainfrom
diag/frozen-tree

Conversation

@agr77one

Copy link
Copy Markdown
Owner

Closes the gap the install audit found: the installer compiled but produced a
non-functional app (works in dev only). Coordinated fix:

  • Flatten the PyInstaller bundle into {app} (was {app}\FastFlowPrompt) and
    ship setup/defaults loose at {app}\setup\defaults. Matches paths.py's
    documented production layout, so APP_DIR resolves correctly and the autostart
    command + config seed work — no paths.py change (zero dev risk). Fixes the
    four stale {app}\FastFlowPrompt\*.exe refs + uninstall cleanup.
  • AHK->frozen-exe bridge: grammar fix, chat, daemon start, and the per-launch
    first-run check launched pythonw+*.py, but only the .exe are shipped.
    New EntrypointCmd_Impl runs the bundled ffp-*.exe (same CLI args) when
    present, else pythonw+.py in dev. FileExist-gated -> dev unchanged.
  • Icon: spec pointed at non-existent setup/logo.ico; now scripts/assets/flowkey.ico.
  • build.ps1: prints the frozen tree (ground-truth diagnostic) — kept for future debugging.

Ground truth from the CI freeze confirms exes at the bundle root and datas in
_internal\. AHK include graph parse-checks clean. Final validation needs an
actual install
(no clean VM); a workflow_dispatch build verifies the .iss
compiles and the artifact is produced.

agcycle and others added 3 commits June 15, 2026 22:22
- spec: ICON_PATH pointed at non-existent setup/logo.ico, so the guard left it
  None and all four exes (and their shortcuts) built with no embedded icon.
  Point it at scripts/assets/flowkey.ico (the real icon, same file the .iss
  uses as SetupIconFile), keeping setup/logo.ico as a fallback.
- build.ps1: print the frozen dist\FastFlowPrompt tree + key asset locations
  (exes, _internal, app.js, seed config, .ico). The installed app's path
  resolution depends on exactly where PyInstaller lands these; this gives the
  ground truth needed to wire the AHK/Python launch+path code correctly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The installer compiled but produced a non-functional app: a systemic mismatch
between the install layout, paths.py, and the AHK launcher (none of which had
ever been exercised end-to-end). Two coordinated fixes:

1. Flatten the PyInstaller bundle into {app} (was {app}\FastFlowPrompt) and
   ship setup/defaults as loose files at {app}\setup\defaults. paths.py's
   production mode computes APP_DIR as the dir holding scripts\/ahk\/setup\;
   nesting the bundle one level down made APP_DIR resolve to {app}\FastFlowPrompt
   so the daemon's autostart command came out empty and the config seed was
   looked up in the wrong place. Flattening matches paths.py's documented layout
   — NO paths.py change needed (zero risk to the dev install). Also fixes the
   four stale {app}\FastFlowPrompt\*.exe references (icons, uninstall icon,
   first-run launch) and the uninstall cleanup.

2. AHK->frozen-exe bridge. paths.ahk built scriptPath/chatScriptPath/
   daemonScriptPath as A_ScriptDir\*.py, but the installer ships only the .ahk
   files + the frozen .exe (never the .py), so grammar fix, chat, the daemon,
   AND the per-launch first-run check all looked for missing .py and failed.
   New EntrypointCmd_Impl/FrozenEntrypointExe_Impl/RunCmdExec_Impl run the
   bundled ffp-*.exe (which take the same CLI args) when present, falling back
   to pythonw+.py in dev. FileExist-gated, so dev behavior is unchanged. Routed
   all four entrypoints (grammar, daemon, chat, first-run) + shutdown cleanup.

Verified by inspection against the CI freeze tree (exes at bundle root, datas
in _internal\). AHK include graph parse-checks clean. Final validation requires
an actual install (no clean VM available).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@agr77one agr77one merged commit a00746a into main Jun 16, 2026
6 checks passed
@agr77one agr77one deleted the diag/frozen-tree branch June 16, 2026 02:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants